/**
 * DateUtils.java
 */
package com.welldone.util;

import java.util.*;
import java.text.*;



public class DateUtils{
  private  static Calendar calendar = null;
  /**
   * 构造函数.无内容
   */
  public DateUtils() {
  }  
 
  /**
   * 私有函数，生成calendar对象。
   */  
  private static void makeCalendar(Date myDate){
  	calendar = Calendar.getInstance();	
	calendar.setTime(myDate);  	
  }
  

  
  /**
   * 返回"yyyy年MM月dd日 HH时mm分"格式的字符串
   * @param myDate 日期型参数
   * @return  yyyy年MM月dd日 HH时mm分
   */  

  public  static final String formatDate1(Date myDate) {
  	  if(myDate==null){
  	  	  return "";
  	  }else{
	      SimpleDateFormat formatter = new SimpleDateFormat ("yyyy年MM月dd日 HH时mm分");
	      String dateStr = formatter.format(myDate);
	      return dateStr;
    }
  }
  /**
   * 返回"yyyy年MM月dd日"格式的字符串
   * @param myDate 日期型参数
   * @return  yyyy年MM月dd日
   */ 
  public  static final String formatDate2(Date myDate) {
  	  if(myDate==null){
  	  	  return "";
  	  }else{  	
	      SimpleDateFormat formatter = new SimpleDateFormat ("yyyy年MM月dd日");
	      String dateStr = formatter.format(myDate);
	      return dateStr;
        }
      
  }
  /**
   * 返回"yyyy/MM/dd HH:mm"格式的字符串
   * @param myDate 日期型参数
   * @return  yyyyy/MM/dd HH:mm
   */  
  public  static final String formatDate3(Date myDate) {
  	  if(myDate==null){
  	  	  return "";
  	  }else{ 
	      SimpleDateFormat formatter = new SimpleDateFormat ("yyyy/MM/dd HH:mm");
	      String dateStr = formatter.format(myDate);
	      return dateStr;
	  }
  }
  /**
   * 返回"yyyy/MM/dd"格式的字符串
   * @param myDate 日期型参数
   * @return  yyyy/MM/dd
   */  
  public  static final String formatDate4(Date myDate) {
  	  if(myDate==null){
  	  	  return "";
  	  }else{   	
	      SimpleDateFormat formatter = new SimpleDateFormat ("yyyy/MM/dd");
	      String dateStr = formatter.format(myDate);
	      return dateStr;
	  }
  }
  
  /**
   * 返回"yyyyMMddHHmm"格式的字符串
   * @param myDate 日期型参数
   * @return  yyyyMMddHHmm
   */  

  public  static final String formatDate5(Date myDate) {
  	  if(myDate==null){
  	  	  return "";
  	  }else{   	
	      SimpleDateFormat formatter = new SimpleDateFormat ("yyyyMMddHHmm");
	      String dateStr = formatter.format(myDate);
	      return dateStr;
	 }     
  } 
     
  /**
   * 返回"yyyy/MM/dd/HH/mm"格式的字符串
   * @param myDate 日期型参数
   * @return  yyyy/MM/dd/HH/mm
   */  

  public  static final String formatDate6(Date myDate) {
   	  if(myDate==null){
  	  	  return "";
  	  }else{  	
	      SimpleDateFormat formatter = new SimpleDateFormat ("yyyy/MM/dd/HH/mm");
	      String dateStr = formatter.format(myDate);
	      return dateStr;
	  }
  }
  /**
   * 返回"yyyyMMdd"格式的字符串
   * @param myDate 日期型参数
   * @return  yyyyMMdd
   */  

  public  static final String formatDate7(Date myDate) {
   	  if(myDate==null){
  	  	  return "";
  	  }else{    	
	      SimpleDateFormat formatter = new SimpleDateFormat ("yyyyMMdd");
	      String dateStr = formatter.format(myDate);
	      return dateStr;
	  }    
  }  
  /**
   * 返回"yyyyMM"格式的字符串
   * @param myDate 日期型参数
   * @return  yyyyMM
   */  

  public  static final String formatDate8(Date myDate) {
   	  if(myDate==null){
  	  	  return "";
  	  }else{    	
	      SimpleDateFormat formatter = new SimpleDateFormat ("yyyyMM");
	      String dateStr = formatter.format(myDate);
	      return dateStr;
	  }    
  }  
  /**
   * 返回"yyyy年MM月"格式的字符串
   * @param myDate 日期型参数
   * @return  yyyy年MM月
   */  

  public  static final String formatDate9(Date myDate) {
  	  if(myDate==null){
  	  	  return "";
  	  }else{
	      SimpleDateFormat formatter = new SimpleDateFormat ("yyyy年MM月");
	      String dateStr = formatter.format(myDate);
	      return dateStr;
    }
  } 
  public  static final String formatDate10(Date myDate) {
	  if(myDate==null){
	  	  return "";
	  }else{
	      SimpleDateFormat formatter = new SimpleDateFormat ("HH:mm:ss");
	      String dateStr = formatter.format(myDate);
	      return dateStr;
  }
}
  
  /**
   * 在当前日期上加月
   * @param myDate 日期型参数
   * @param amount int型参数，要增加的月数。
   * @return  日期型
   */  
  public  static final Date addMonth(Date myDate,int amount){
  	Date returnDate=new Date();
  	makeCalendar(myDate);
  	calendar.add(Calendar.MONTH,amount);
  	returnDate=calendar.getTime();
  	return returnDate;
  } 
       
  /**
   * 在当前日期上加天数
   * @param myDate 日期型参数
   * @param amount int型参数，要增加的天数。
   * @return  日期型
   */  
  public  static final Date addDate(Date myDate,int amount){
  	Date returnDate=new Date();
  	makeCalendar(myDate);
  	calendar.add(Calendar.DATE,amount);
  	returnDate=calendar.getTime();
  	return returnDate;
  } 
  /**
   * 在当前日期上加小时数
   * @param myDate 日期型参数
   * @param amount int型参数，要增加的小时数。
   * @return  日期型
   */ 
  public  static final Date addHour(Date myDate,int amount){
  	Date returnDate=new Date();
  	makeCalendar(myDate);
  	calendar.add(Calendar.HOUR,amount);
  	returnDate=calendar.getTime();
  	return returnDate;
  }   
  /**
   * 在当前日期上加分钟数
   * @param myDate 日期型参数
   * @param amount int型参数，要增加的分钟数。
   * @return  日期型
   */ 
  public  static final Date addMinute(Date myDate,int amount){
  	Date returnDate=new Date();
  	makeCalendar(myDate);
  	calendar.add(Calendar.MINUTE,amount);
  	returnDate=calendar.getTime();
  	return returnDate;
  } 
  
  /**
   * 返回年
   * @param myDate 日期型参数
   * @return  int 年
   */    
    public  static final int getYear(Date myDate) {
    	makeCalendar(myDate);
		return calendar.get(Calendar.YEAR);
    }
    
  /**
   * 返回中文名称月
   * @param myDate 日期型参数
   * @return  String 月
   */     
    public  static final String getMonth(Date myDate) {
    //	makeCalendar(myDate);
		int m = getMonthInt(myDate);
		String[] months = new String [] { "一月", "二月", "三月",
						"四月", "五月", "六月",
						"七月", "八月", "九月",
						"十月", "十一月", "十二月" };
		if (m > 12)
		    return "Unknown to Man";
		
		return months[m - 1];

    }
    
   /**
   * 返回中文名称星期几
   * @param myDate 日期型参数
   * @return  String 几
   */     

    public  static final String getDay(Date myDate) {
    	makeCalendar(myDate);
		int x = getDayOfWeek(myDate);
		String[] days = new String[] { "星期天","星期一", "星期二", "星期三", "星期四", 
					      "星期五", "星期六"};
	
		if (x > 7)
		    return "Unknown to Man";
	
		return days[x - 1];

    }
    
   /**
   * 当前日期是本月的第几天
   * @param myDate 日期型参数
   * @return  int型
   */       

    public  static final int getDayOfMonth(Date myDate) {
    	makeCalendar(myDate);
		return calendar.get(Calendar.DAY_OF_MONTH);
    }
    
    /**
   * 当前日期是本年的第几天
   * @param myDate 日期型参数
   * @return  int型
   */     

    public  static final int getDayOfYear(Date myDate) {
    	makeCalendar(myDate);
		return calendar.get(Calendar.DAY_OF_YEAR);
    }
    
   /**
   * 当前日期是本年的第几个星期
   * @param myDate 日期型参数
   * @return  int型
   */  
    public  static final int getWeekOfYear(Date myDate) {
    	makeCalendar(myDate);
		return calendar.get(Calendar.WEEK_OF_YEAR);
    }
    
   /**
   * 当前日期是本月的第几个星期
   * @param myDate 日期型参数
   * @return  int型
   */  
    public  static final int getWeekOfMonth(Date myDate) {
    	makeCalendar(myDate);
		return calendar.get(Calendar.WEEK_OF_MONTH);
    }
   /**
   * 当前日期是本周的第几天
   * @param myDate 日期型参数
   * @return  int型
   */  
    public  static final int getDayOfWeek(Date myDate) {
    	makeCalendar(myDate);
		return calendar.get(Calendar.DAY_OF_WEEK);
    }
    
    /**
   * 返回小时
   * @param myDate 日期型参数
   * @return  int型
   */    
    public  static final int getHour(Date myDate) {
    	makeCalendar(myDate);
		return calendar.get(Calendar.HOUR_OF_DAY);
    }
    
    /**
   * 返回分钟
   * @param myDate 日期型参数
   * @return  int型
   */     
    public  static final int getMinute(Date myDate) {
    	makeCalendar(myDate);
		return calendar.get(Calendar.MINUTE);
    }

    /**
   * 返回秒
   * @param myDate 日期型参数
   * @return  int型
   */   
    public  static final int getSecond(Date myDate) {
    	makeCalendar(myDate);
		return calendar.get(Calendar.SECOND);
    } 
    /**
   * 返回天
   * @param myDate 日期型参数
   * @return  int型
   */   
    public  static final int getDate(Date myDate) {
    	makeCalendar(myDate);
		return calendar.get(Calendar.DATE);
    }     
    /**
   * 返回月
   * @param myDate 日期型参数
   * @return  int型
   */     
   public  static final int getMonthInt(Date myDate) {
   	makeCalendar(myDate);
	return 1 + calendar.get(Calendar.MONTH);
    }   
    
  /**
   * 返回"yyyy-MM-dd HH:mm"格式的字符串
   * @param myDate 日期型参数
   * @return  yyyyy-MM-dd HH:mm
   */  
  public  static final String formatDate11(Date myDate) {
  	  if(myDate==null){
  	  	  return "";
  	  }else{ 
	      SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm");
	      String dateStr = formatter.format(myDate);
	      return dateStr;
	  }
  }
  /**
   * 返回"yyyy-MM-dd"格式的字符串
   * @param myDate 日期型参数
   * @return  yyyyy-MM-dd
   */  
  public  static final String formatDate12(Date myDate) {
  	  if(myDate==null){
  	  	  return "";
  	  }else{ 
	      SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd");
	      String dateStr = formatter.format(myDate);
	      return dateStr;
	  }
  }
  
  /**@return yyyyMMddHHmmssSSS **/
  public  static final String formatDate13(Date myDate) {
  	  if(myDate==null){
  	  	  return "";
  	  }else{   	
	      SimpleDateFormat formatter = new SimpleDateFormat ("yyyyMMddHHmmssSSS");
	      String dateStr = formatter.format(myDate);
	      return dateStr;
	 }     
  } 
  
  /**@return yyyyMMddHHmmss **/
  public  static final String formatDate14(Date myDate) {
  	  if(myDate==null){
  	  	  return "";
  	  }else{   	
	      SimpleDateFormat formatter = new SimpleDateFormat ("yyyyMMddHHmmss");
	      String dateStr = formatter.format(myDate);
	      return dateStr;
	 }     
  } 
  
  /**@return yyyy-MM-dd-HH:mm:ss.zzz **/
  public  static final String formatDate15(Date myDate) {
  	  if(myDate==null){
  	  	  return "";
  	  }else{   	
	      SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss.SSS");
	      String dateStr = formatter.format(myDate);
	      return dateStr;
	 }     
  } 
  
  
  /**
   * 
   * @param dateStr String
   * @return yyyy-MM-dd-HH:mm:ss.zzz
   */
  public  static final String formatDate16(String dateStr) {
  	  if(dateStr==null){
  	  	  return "";
  	  }else{   	
  		 Date date=null;
	      SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss.SSS");
	      try {
			date=formatter.parse(dateStr);
			return formatter.format(date);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	      
	      return null;
	 }     
  } 
  
  
  /**@return yyyy-MM-dd-HH:mm:ss **/
  public  static final String formatDate17(Date myDate) {
  	  if(myDate==null){
  	  	  return "";
  	  }else{   	
	      SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
	      String dateStr = formatter.format(myDate);
	      return dateStr;
	 }     
  } 
  
 /**
  * 
  * @param myDate String  yyyyMMddHHmmsszzz.xml
  * @return    yyyyMMddHHmmsszzz
  */
  public  static final String formatDate15(String myDate) {
  	  return myDate.substring(0,myDate.length()-3);
  } 
  
  /**
   * 将String转换为DATE String=yyyy-MM-dd HH:mm:ss
   * @return
   */
  public static final Date converStrToDate(String dateStr){
	  SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	  Date date=null;
	  try {
		date=df.parse(dateStr);
	} catch (ParseException e) {
		System.out.println("============日期格式转换出错=========");
		e.printStackTrace();
	}
	
	return date;
  }
  
  /**
   * 用于实时流
   * 将String转换为DATE String=yyyy-MM-dd HH:mm:ss.SSS
   * @return
   */
  public static final String converStrToDate2(String dateStr){
	 
	  SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
	  Date date=null;
	  try {
		date=df.parse(dateStr);
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.add(Calendar.HOUR_OF_DAY, 1);
		return formatDate15(c.getTime());
	} catch (ParseException e) {
		System.out.println("============日期格式转换出错=========");
		e.printStackTrace();
		
	}
	return null;
  }
  
  /**
   * 用于实时流，传入格式yyyymmddHHmmssSSS
   * 将String转换为DATE String=yyyy-MM-dd HH:mm:ss.SSS
   * @return
   */
  public static final String flow_yyyyMMddHHmmssSSS(String dateStr){
	 
	  SimpleDateFormat df=new SimpleDateFormat("yyyyMMddHHmmssSSS");
	  Date date=null;
	  try {
		date=df.parse(dateStr);
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.add(Calendar.HOUR_OF_DAY, -1);
		return formatDate15(c.getTime());
	} catch (ParseException e) {
		System.out.println("============日期格式转换出错=========");
		e.printStackTrace();
		
	}
	return null;
  }
  /**
   * 上周同期
   * @param dateStr
   * @return
   */
  public static final String flow_week(String dateStr){
	  SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
	  Date date=null;
	  try {
		date=df.parse(dateStr);
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.add(Calendar.DAY_OF_MONTH, -7);
		return formatDate15(c.getTime());
	} catch (ParseException e) {
		System.out.println("============日期格式转换出错=========");
		e.printStackTrace();
		
	}
	return null;
  }
  /**
   * 上周同期时间范围在minute分钟内
   * @param minute
   * @param dateStr
   * @return
   */
  public static final String flow_week_minute(int minute,String dateStr){
	  SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
	  Date date=null;
	  try {
		date=df.parse(dateStr);
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.add(Calendar.MINUTE, -minute);
		return formatDate15(c.getTime());
	} catch (ParseException e) {
		System.out.println("============日期格式转换出错=========");
		e.printStackTrace();
		
	}
	return null;
  }
  
  
  
  
  
  public static final String converStrToDate3(String dateStr){
		 
	  SimpleDateFormat df=new SimpleDateFormat("yyyyMMddHHmmssSSS");
	  Date date=null;
	  try {
		date=df.parse(dateStr);
		return formatDate15(date);
	} catch (ParseException e) {
		System.out.println("============日期格式转换出错=========");
		e.printStackTrace();
		
	}
	return null;
  }
  
  public static final String converStrToDate4(String dateStr){
	  System.out.println("converStrToDate4:dateStr="+dateStr);
	  SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
	  Date date=null;
	  try {
		date=df.parse(dateStr);
		String r=formatDate13(date);
		return r;
	} catch (ParseException e) {
		System.out.println("============日期格式转换出错=========");
		e.printStackTrace();
		
	}
	return null;
  }
  
  
  
  /**
   * 用于过车
   * 将String转换为DATE String=yyyy-MM-dd HH:mm:ss.SSS
   * @return
   */
  public static final String converStrToDate5(String dateStr){
	  SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
	  Date date=null;
	  try {
		date=df.parse(dateStr);
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.add(Calendar.MINUTE, 2);
		return formatDate15(c.getTime());
	} catch (ParseException e) {
		System.out.println("============日期格式转换出错=========");
		e.printStackTrace();
		
	}
	return null;
  }
  
  
  /**
   * 用于过车，传入格式yyyymmddHHmmssSSS
   * 将String转换为DATE String=yyyy-MM-dd HH:mm:ss.SSS
   * +2
   * @return
   */
  public static final String watch_yyyyMMddHHmmssSSS(String dateStr){
	 
	  SimpleDateFormat df=new SimpleDateFormat("yyyyMMddHHmmssSSS");
	  Date date=null;
	  try {
		date=df.parse(dateStr);
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.add(Calendar.MINUTE, 2);
		return formatDate15(c.getTime());
	} catch (ParseException e) {
		System.out.println("============日期格式转换出错=========");
		e.printStackTrace();
		
	}
	return null;
  }
  
  
  /**
   * 用于过车，传入格式yyyymmddHHmmssSSS
   * 将String转换为DATE String=yyyy-MM-dd HH:mm:ss.SSS
   * -2
   * @return
   */
  public static final String watch2_yyyyMMddHHmmssSSS(String dateStr){
	 
	  SimpleDateFormat df=new SimpleDateFormat("yyyyMMddHHmmssSSS");
	  Date date=null;
	  try {
		date=df.parse(dateStr);
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.add(Calendar.MINUTE, -2);
		return formatDate15(c.getTime());
	} catch (ParseException e) {
		System.out.println("============日期格式转换出错=========");
		e.printStackTrace();
		
	}
	return null;
  }
  
  public static void main(String args[]){
		converStrToDate2("20110425180041123");
	}
	
  
  /**
   * 将String转换为DATE String=yyyy-MM-dd HH:mm:ss
   * @return
   */
  public static final Date converStrToDateNoTime(String dateStr){
	  SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
	  Date date=null;
	  try {
		date=df.parse(dateStr);
	} catch (ParseException e) {
		//System.out.println("============日期格式转换出错=========");
		e.printStackTrace();
	}
	
	return date;
  }
  
    /**
     * d2-d1 返回两个日期相差的秒数
     * @param d1
     * @param d2
     * @return 秒数
     */
	public static long GetTwoDateMinusSecond(java.util.Date d1,java.util.Date d2)
	{     
		
			Calendar c1 = Calendar.getInstance();
			Calendar c2 = Calendar.getInstance();			
			c1.setTime(d1);
			c2.setTime(d2);
			long hh=c2.getTimeInMillis()-c1.getTimeInMillis();
			return hh/1000;
	}
	
	/** 返回本月最后一天 **/
	public static Date getLastDayOfMonth(Date day) {
		  java.util.Calendar calendar = new GregorianCalendar();
		  calendar.setTime(day);
		  calendar.set(Calendar.DATE, 1);
		  calendar.roll(Calendar.DATE, -1);
		  return calendar.getTime();
		  ////System.out.println(simpleFormate.format(calendar.getTime()));
    }
	/** 返回下个月第一天 **/
	public static Date getFirstDayOfNextMonth(Date day) {
		 
		  java.util.Calendar calendar = new GregorianCalendar();
		  calendar.setTime(day);
		  calendar.add(Calendar.DATE, 1);
		  return calendar.getTime();
		  ////System.out.println(simpleFormate.format(calendar.getTime()));
  }
	
	/** 返回当年的最后一天 **/
	public static Date getLastDayOfYear(Date day) {
		  java.util.Calendar calendar = new GregorianCalendar();
		  calendar.setTime(day);
		  SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd");
		  try {
			return formatter.parse(calendar.get(Calendar.YEAR)+"-"+12+"-"+31);
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}
		////System.out.println(simpleFormate.format(calendar.getTime()));
   }
 
}